/*
 * 
 * (c) Copyright, 1986-1991
 * Biodynamics Research Unit
 * Mayo Foundation
 *
 * dbh.h
 *
 *
 * database sub-definitions
 */

/*
 *
 * The previous-generation header for Analyze images. Although (c) Mayo
 * Foundation, it has been in the public domain for many years.
 *
 * Analyze images have a 348 byte header stored in a file with a .hdr suffix,
 * and a corresponding .img file containing just the pixel data.
 *
 */

struct header_key                 /*      header_key       */
    {                                  /* off + size*/
        int sizeof_hdr;                /* 0 + 4     */
        char data_type[10];            /* 4 + 10    */
        char db_name[18];              /* 14 + 18   */
        int extents;                   /* 32 + 4    */
        short int session_error;       /* 36 + 2    */
        char regular;                  /* 38 + 1    */
        char hkey_un0;                 /* 39 + 1    */
    };           		       /* total=40  */

struct image_dimension           /*      image_dimension  */
    {                                  /* off + size*/
        short int dim[8];              /* 0 + 16    */
        char vox_units[4];	       /* 16 + 4    */
        char cal_units[8];	       /* 20 + 4    */
        short int unused1;	       /* 24 + 2    */
        short int datatype;	       /* 30 + 2    */
        short int bitpix;              /* 32 + 2    */
        short int dim_un0;             /* 34 + 2    */
        float pixdim[8];               /* 36 + 32   */
        		 
        		/*	pixdim[] specifies the voxel dimensions:
        			pixdim[1] - voxel width
        			pixdim[2] - voxel height
        			pixdim[3] - interslice distance
        				..etc
        		*/
        float vox_offset;              /* 68 + 4    */
        float funused1;                /* 72 + 4    */
        float funused2;                /* 76 + 4    */
        float funused3;                /* 80 + 4    */
        float cal_max;                 /* 84 + 4    */
        float cal_min;                 /* 88 + 4    */
        int compressed;                /* 92 + 4    */
        int verified;                  /* 96 + 4    */
        int glmax, glmin;              /* 100 + 8   */
    };          

struct data_history               /*      data_history     */
    {                                  /* off + size*/
        char descrip[80];              /* 0 + 80    */
        char aux_file[24];             /* 80 + 24   */
        char orient;                   /* 104 + 1   */
        char originator[10];           /* 105 + 10  */
        char generated[10];            /* 115 + 10  */
        char scannum[10];              /* 125 + 10  */
        char patient_id[10];           /* 135 + 10  */
        char exp_date[10];             /* 145 + 10  */
        char exp_time[10];             /* 155 + 10  */
        char hist_un0[3];              /* 165 + 3   */
        int views;                     /* 168 + 4   */
        int vols_added;                /* 172 + 4   */
        int start_field;               /* 176 + 4   */
        int field_skip;                /* 180 + 4   */
        int omax,omin;                 /* 184 + 8   */
        int smax,smin;                 /* 192 + 8   */
    };                     	       /* total=200 */

struct dsr                        /*      dsr              */
    {                                  /* off + size*/
        struct header_key hk;          /* 0 + 40    */
        struct image_dimension dime;   /* 40 + 108  */
        struct data_history hist;      /* 148 + 200 */
    };                     	       /* total=348 */

/* Acceptable values for hdr.dime.datatype */

/*
 * commented this one out: we don't use it, and dirent.h defines this on some
 * platforms.
 *
#define DT_UNKNOWN			0
 */

#define DT_BINARY			1
#define DT_UNSIGNED_CHAR		2
#define DT_SIGNED_SHORT			4
#define DT_SIGNED_INT			8
#define DT_FLOAT			16
#define DT_COMPLEX			32
#define DT_DOUBLE			64
#define DT_RGB				128
